package com.fowo.api.sys.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 幂等方法注解
 * @author yl_ls
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Idempotent {
    /**
     * 幂等过期时间，默认为 1 秒
     */
    int timeout() default 1;

    /**
     * 幂等过期时间单位，默认为秒
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * Redis 锁键前缀
     */
    String keyPrefix() default "Idempotent";

    /**
     * Redis 锁键分隔符
     */
    String delimiter() default "/";

    /**
     * Redis 锁键包括方法签名
     */
    boolean keySignature() default true;

    /**
     * 保护期返回的错误消息
     */
    String message() default "重复请求，请稍后再试";
}
